#include <string.h>
#include <stdlib.h>
#include "pixel.h"





typedef struct
{
 pixel * tab;
 int dimx, dimy;

} image;

// imInit initialise dimx et dimy (après vérification) de la structure Image
// puis alloue le tableau de pixel dans le tas
void imInit(image * im , int x, int y);


// Libère la mémoire du tableau de pixels et met les
// champs dimx et dimy de la structure à 0

void imLibere(image * im);

// imCreer alloue dans le tas une structure Image puis l'initialise
// avec imInit => 2 lignes

image *imCreer(int dimx, int dimy);


// Libere le tableau de pixel en appelant imLibere puis détruit
// la structure image

void imDetruire(image  ** pim);



// getPix récupère le pixel de coordonnée (x,y) en vérifiant leur validité
// la formule pour passer de 2D à un tab 1D est  pix[y*dimx+x]

pixel *getpix(image im, int x, int y);
pixel Constgetpix(image im, int x, int y);

// setPix modifie le pixel de coord (x,y)

void setPix(image * im, int x, int y, pixel couleur);

// dessine un rectangle de couleur dans l'image en utilisant setPix

void imDessineRect(image * im, int Xmin,int Ymin, int Xmax, int Ymax, pixel couleur);

// efface l'image en appelant imDessineRectangle avec le bon rectangle

void imEffacer(image * im, pixel couleur);

// Effectue tout une série de test vérifiant que le module fonctionne et que les
// champ de la structure sont conformes

void imTestRegression();


void imSauver(const image *pIm, const char filename[]);

void imOuvrir(image *pIm, const char filename[]);

void imPrintf(const image *pIm);
